<?php
    /**
     * Created by PhpStorm.
     * User: mybook-lhp
     * Date: 18/7/6
     * Time: 下午3:31
     */

    namespace app\payment\logic;

    use Omnipay\Omnipay;

    class OmniPayWechatPay extends PayBase
    {

        static public function send($out_trade_no, $total_fee)
        {

            $notify_url = request()->domain() . self::Wechatpay_Notify_Url;
            $config = module_config('payment');
            //gateways: WechatPay_App, WechatPay_Native, WechatPay_Js, WechatPay_Pos, WechatPay_Mweb
            $gateway = Omnipay::create('WechatPay_App');

            $gateway->setAppId($config['wxpay_app_id']);
            $gateway->setMchId($config['wxpay_mch_id']);
            $gateway->setApiKey($config['wxapy_mch_key']);
            $gateway->setNotifyUrl($notify_url);

            $order = ['body' => self::Body . ':' . $total_fee . '元', 'out_trade_no' => $out_trade_no, 'total_fee' => $total_fee, //=0.01
                'spbill_create_ip' => self::get_client_ip(), 'fee_type' => 'CNY', 'notify_url' => self::Wechatpay_Notify_Url];
            
            $request = $gateway->purchase($order);

            $response = $request->send();

            //available methods
            $response->isSuccessful();
            $response->getData(); //For debug
            return $response->getAppOrderData(); //For WechatPay_App
            $response->getJsOrderData(); //For WechatPay_Js
            $response->getCodeUrl(); //For Native Trade Type
        }

        /**
         * 获取客户端IP地址
         *
         * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
         *
         * @return mixed
         */
        static function get_client_ip($type = 0)
        {

            $type = $type ? 1 : 0;
            static $ip = NULL;
            if ($ip !== NULL) return $ip[$type];
            if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
                $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
                $pos = array_search('unknown', $arr);
                if (false !== $pos) unset($arr[$pos]);
                $ip = trim($arr[0]);
            } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
                $ip = $_SERVER['HTTP_CLIENT_IP'];
            } elseif (isset($_SERVER['REMOTE_ADDR'])) {
                $ip = $_SERVER['REMOTE_ADDR'];
            }
            // IP地址合法验证
            $long = sprintf("%u", ip2long($ip));
            $ip = $long ? [$ip, $long] : ['0.0.0.0', 0];
            return $ip[$type];
        }
    }